package dados;

public class ArvoreDataSaidaServico {
	private String dataSaida;
	private ArvoreDataSaidaServico anterior;
	private ArvoreDataSaidaServico posterior;
	private ArvorePk arvore;
	
	public ArvoreDataSaidaServico(String dataSaida, ArvoreDataSaidaServico anterior, 
			ArvoreDataSaidaServico posterior, ArvorePk arvore) {
		this.dataSaida = dataSaida;
		this.anterior = anterior;
		this.posterior = posterior;
		this.arvore = arvore;
	}
	public ArvoreDataSaidaServico getAnterior() {
		return anterior;
	}
	public void setAnterior(ArvoreDataSaidaServico anterior) {
		this.anterior = anterior;
	}
	public ArvorePk getArvore() {
		return arvore;
	}
	public void setArvore(ArvorePk arvore) {
		this.arvore = arvore;
	}
	public String getDataSaida() {
		return dataSaida;
	}
	public void setDataSaida(String dataSaida) {
		this.dataSaida = dataSaida;
	}
	public ArvoreDataSaidaServico getPosterior() {
		return posterior;
	}
	public void setPosterior(ArvoreDataSaidaServico posterior) {
		this.posterior = posterior;
	}
	public void adicionarArvoreConjugada(int numAtendimento, int seqAtendimento, int posicao) {
		int valor = numAtendimento*1000 + seqAtendimento;
		if (arvore.getValor()>valor){
			if (arvore.getAnterior()==null){
				arvore.setAnterior(new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null)); 
			} else {
				arvore.adicionarArvorePropria(arvore.getAnterior(),numAtendimento,seqAtendimento,posicao);
			}			
		} else if (arvore.getValor()>valor){
			if (arvore.getPosterior()==null){
				arvore.setPosterior(new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null));
			} else {
				arvore.adicionarArvorePropria(arvore.getPosterior(),numAtendimento,seqAtendimento,posicao);
			}
		}
		
	}
	public void adicionarArvorePropria(ArvoreDataSaidaServico prox, String dataSaida, int numAtendimento, int seqAtendimento, int posicao) {
		if (prox.getDataSaida().equals(dataSaida)){
			prox.adicionarArvoreConjugada(numAtendimento,seqAtendimento,posicao);
		} else if (prox.getDataSaida().compareTo(dataSaida)>0){
			if (prox.getAnterior()==null){
				prox.setAnterior(new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null))); 
			} else {
				prox.adicionarArvorePropria(prox.getAnterior(),dataSaida,numAtendimento,seqAtendimento,posicao);
			}			
		} else {
			if (prox.getPosterior()==null){
				prox.setPosterior(new ArvoreDataSaidaServico(dataSaida,null,null,new ArvorePk(posicao,numAtendimento,seqAtendimento,null,null)));
			} else {
				prox.adicionarArvorePropria(prox.getPosterior(),dataSaida,numAtendimento,seqAtendimento,posicao);
			}
		}	
		
	}
}
